/*
 * File contenente il modulo Caricamento/Salvataggio
 */
#include "strutt_dati.h"
#include "manip_stampa.h"
#include "fileIO.h"
#include <sstream>

using namespace std ;

void salva(const desc_sequenza &s, const char nome[])
{
    ofstream f(nome) ;
    
    for (int i = 0 ; i < s.num_elem ; i++) {
	assert(s.elementi[i] != 0) ;
	stampa_elem(*s.elementi[i], f);
    }
}

bool carica(desc_sequenza &seq, const char nome[])
{
    const unsigned int MAXLINE = MAXLUN * 100 ;
    ifstream f(nome) ;
    if (!f) {
	cerr<<"Errore nel caricamento del file "<<nome<<endl ;
	return false ;
    }

    // eliminiamo l'eventuale precedente sequenza per evitare memory leak
    distruggi(seq) ;
    inizializza(seq, seq.tipo_chiave) ; // fondamentale per
					// riutilizzare la sequenza
					// dopo la distruggi !!!

    char buf[MAXLINE + 1] ;
    while (f.getline(buf, MAXLINE)) {
	istringstream s(buf) ;
	elem *el = crea_elem(s) ;
	if (el == 0) {
	    cout<<"Creazione nuovo elemento fallita, caricamento interrotto"
		<<endl ;
	    return false ;
	}
	inserisci(seq, el, in_coda) ;
    }
    return true ;
}

// Fine definizioni delle funzioni del modulo Caricamento/Salvataggio
